//package com.lt.dailytest.config.jsckon;
//
//import com.fasterxml.jackson.databind.BeanDescription;
//import com.fasterxml.jackson.databind.SerializationConfig;
//import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
//import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
//
//import java.util.Collection;
//import java.util.List;
//
///**
// * @author tong.luo
// * @description MyBeanSerializerModifier
// * 此modifier主要做的事情为：
// * 1.当序列化类型为数组集合时，当值为null时，序列化成[]
// * 2.String类型值序列化为""
// * @date 2021/7/22 17:24
// */
//public class MyBeanSerializerModifier extends BeanSerializerModifier {
//    @Override
//    public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
//                                                     BeanDescription beanDesc,
//                                                     List<BeanPropertyWriter> beanProperties) {
//        // 循环所有的beanPropertyWriter
//        for (int i = 0; i < beanProperties.size(); i++) {
//            BeanPropertyWriter writer = beanProperties.get(i);
//            // 判断字段的类型，如果是数组或集合则注册nullSerializer
//            if (isArrayType(writer)) {
//                // 给writer注册一个自己的nullSerializer
//                writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullArrayJsonSerializer());
//            }
//            if (isStringType(writer)) {
//                writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer());
//            }
//        }
//        return beanProperties;
//    }
//
//    /**
//     * 是否是数组
//     */
//    private boolean isArrayType(BeanPropertyWriter writer) {
//        Class<?> clazz = writer.getType().getRawClass();
//        return clazz.isArray() || Collection.class.isAssignableFrom(clazz);
//    }
//
//    /**
//     * 是否是String
//     */
//    private boolean isStringType(BeanPropertyWriter writer) {
//        Class<?> clazz = writer.getType().getRawClass();
//        return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
//    }
//
//    /**
//     * 是否是数值类型
//     */
//    private boolean isNumberType(BeanPropertyWriter writer) {
//        Class<?> clazz = writer.getType().getRawClass();
//        return Number.class.isAssignableFrom(clazz);
//    }
//
//    /**
//     * 是否是boolean
//     */
//    private boolean isBooleanType(BeanPropertyWriter writer) {
//        Class<?> clazz = writer.getType().getRawClass();
//        return clazz.equals(Boolean.class);
//    }
//}
